home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / oleo130s.zip / OLEO130S.TAR / oleo-1.3 / panic.c < prev    next >
C/C++ Source or Header  |  1993-03-30  |  4KB  |  155 lines

  1. /*    Copyright (C) 1990, 1992, 1993 Free Software Foundation, Inc.
  2.  
  3. This file is part of Oleo, the GNU Spreadsheet.
  4.  
  5. Oleo is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2, or (at your option)
  8. any later version.
  9.  
  10. Oleo is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with Oleo; see the file COPYING.  If not, write to
  17. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  18.  
  19. #include <stdio.h>
  20. #include "funcdef.h"
  21. #include "sysdef.h"
  22.  
  23. #include "global.h"
  24. #include "io-generic.h"
  25. #include "io-abstract.h"
  26. #include "info.h"
  27. #include "cmd.h"
  28.  
  29.  
  30. extern char **environ;
  31. /* I hope i don't need these since they aren't write for all systems. */
  32. #if 0
  33. #ifdef __STDC__
  34. extern int dup (int);
  35. extern int close (int);
  36. extern VOIDSTAR sbrk (size_t);
  37. extern VOIDSTAR brk (VOIDSTAR);
  38. #else
  39. extern int dup ();
  40. extern int close ();
  41. extern VOIDSTAR sbrk ();
  42. extern VOIDSTAR brk ();
  43. #endif
  44. #endif
  45.  
  46.  
  47.  
  48. void
  49. panic_write_file (fp, rng)
  50.      FILE *fp;
  51.      struct rng *rng;
  52. {
  53.   int fd;
  54.   VOIDSTAR datend;
  55.   VOIDSTAR datstart;
  56.   unsigned long cnt;
  57.  
  58.   if (rng)
  59.     {
  60.       io_error_msg ("Can't write partial panic-save files");
  61.       return;
  62.     }
  63.   fd = dup (fileno (fp));
  64.   if (fd < 0)
  65.     {
  66.       io_error_msg ("Couldn't dup save file");
  67.       return;
  68.     }
  69.   datstart = (VOIDSTAR) (&environ + sizeof (char **));
  70.   datend = (VOIDSTAR) sbrk (0);
  71.   if (datend == (char *) -1)
  72.     {
  73.       io_error_msg ("Couldn't sbrk(0)!");
  74.       close (fd);
  75.       return;
  76.     }
  77.  
  78.   cnt = (char *) datend - (char *) datstart;
  79.   if (write (fd, &cnt, sizeof (cnt)) != sizeof (cnt))
  80.     {
  81.       io_error_msg ("Couldn't write %lu (%d bytes) to save file", cnt, sizeof (cnt));
  82.       close (fd);
  83.       return;
  84.     }
  85.   if (write (fd, datstart, cnt) != cnt)
  86.     {
  87.       io_error_msg ("Couldn't write %lu bytes to save file", cnt);
  88.       close (fd);
  89.       return;
  90.     }
  91.   if (close (fd) < 0)
  92.     {
  93.       io_error_msg ("Couldn't close save file");
  94.       return;
  95.     }
  96. }
  97.  
  98. void
  99. panic_read_file (fp, ismerge)
  100.      FILE *fp;
  101.      int ismerge;
  102. {
  103.   int fd;
  104.   unsigned long cnt;
  105.   VOIDSTAR datstart;
  106.  
  107.   if (ismerge)
  108.     {
  109.       io_error_msg ("Can't merge panic-save files");
  110.       return;
  111.     }
  112.   if ((fd = dup (fileno (fp))) < 0)
  113.     {
  114.       io_error_msg ("Couldn't dup save file");
  115.       return;
  116.     }
  117.   if (read (fd, (VOIDSTAR) & cnt, sizeof (cnt)) != sizeof (cnt))
  118.     {
  119.       io_error_msg ("Couldn't read data_size (%d bytes) from save file", sizeof (cnt));
  120.       close (fd);
  121.       return;
  122.     }
  123.   datstart = (VOIDSTAR) (&environ + sizeof (char **));
  124.   if ((VOIDSTAR)brk ((char *) datstart + cnt) == (VOIDSTAR) - 1)
  125.     {
  126.       io_error_msg ("Couldn't allocate %lu bytes of memory", cnt);
  127.       close (fd);
  128.       return;
  129.     }
  130.   if (read (fd, datstart, cnt) != cnt)
  131.     {
  132.       io_error_msg ("Couldn't read in %lu bytes of data", cnt);
  133.       close (fd);
  134.       return;
  135.     }
  136.   if (close (fd) < 0)
  137.     io_error_msg ("Couldn't close save file");
  138.   io_recenter_all_win ();
  139. }
  140.  
  141. int
  142. panic_set_options (set_opt, option)
  143.      int set_opt;
  144.      char *option;
  145. {
  146.   return -1;
  147. }
  148.  
  149.  
  150. void
  151. panic_show_options ()
  152. {
  153.   io_text_line ("File format:  panic save   (quick-n-dirty data-segment dump)");
  154. }
  155.